package com.itheima.config;


import com.itheima.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;



import java.util.List;


//此处创建一个配置类
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    //    配置静态资源映射
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    //    记录日志
        log.info("开始静态资源映射...");
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
//        设置swagger相关的资源放行规则
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

//   由于前端在处理长整形的时候会损失精度,因此这里需要对代码进行修复
//    由于SpringMvc中,将Controller方法返回值转换为json对象,是通过jackson来实现的,涉及到SpringMVC中的一个消息转换器
//    所以要解决这个问题,就需要对该功能进行拓展

//    调用消息转换器
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器");
//        创建消息转换器对象MJHMC
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//        设置对象转换器,底层使用jackson讲java对象转换为json
//        JacksonObjectMapper是外部文件
        messageConverter.setObjectMapper(new JacksonObjectMapper());
//        讲消息转换器对象追加到框架转换器集合中,并设置它的优先级
        converters.add(0,messageConverter);
    }
}
